"""
十大歌神
NZD正在进行“十大歌神”评选，全校学生可以投票选出他们最喜欢的歌神。
编写一个程序来模拟这个投票和统计过程。
首先，使用random的方式生成100个人名（可以是中英文），然后用random的方法随机抽取这些人名填充到长表中度为1000的列，模拟1000次投票。
最后，程序应统计出十大歌神，并特别打印出冠军的名字和所得票数。
"""
import random

def get_one_name():
    name = ''
    for i in range(5):
        n = random.choice('abcdefghijklmnopqrstuvwxyz')
        name += n
    name = name.title()  #字符串中每个单词首字母大写
    return name

def generate_names(num):
    names = []
    for i in range(num):
        name = get_one_name()
        names.append(name)   # 向列表末尾添加一个元素
    return names

def get_top_voter(dic):
    # 找出第一名
    top1_name = None
    top1_vote = 0
    for k, v in dic.items():
        if v > top1_vote:
            top1_name = k
            top1_vote = v
    return top1_name, top1_vote

def NZD_top_singers():
    names = generate_names(100)  # 生成100个人名
    # 计算投票逻辑
    dic = {}
    for i in range(1000):
        name = random.choice(names)        # 从 100 人中选一个
        if name in dic:
            dic[name] += 1
        else:
            dic[name] = 1
    # 取出冠军
    top1_name, top1_value = get_top_voter(dic)        # 同时用两个变量接收返回的两个值
    print(f"第1名是：{top1_name}，得票：{top1_value}")
    dic.pop(top1_name)  # 移除已找到的最大的键值对
    for i in range(2, 11):   # 2 - 10
        top2_name, top2_value = get_top_voter(dic)  # 同时用两个变量接收返回的两个值
        print(f"第{i}名是：{top2_name}，得票：{top2_value}")
        dic.pop(top2_name)  # 弹出已找到的最大的键值对

if __name__ == '__main__':
    NZD_top_singers()